Introdução

O seguinte relatório foi elaborado para explicar e avaliar a bioequivalência entre dois fármacos (referência e teste) em um desenho cross-over 2x2.

História da Biodisponibilidade/Bioequivalência

Os estudos de biodisponibilidade começaram oficialmente em 1945, com a introdução do termo “disponibilidade biológica”. Entre 1960-1970, ocorreu o desenvolvimento de novas técnicas analíticas mais sensíveis, que permitiu medir fármacos no sangue e comparar as formulações.

Em 1970, no Canadá, a bioequivalência passou a ser usada como um critério regulatório e logo depois em 1977, foi adotada pela FDA (EUA), sendo fortalecida em 1984 por uma lei que permite a aprovação de genéricos sem testes clínicos, desde que fossem bioequivalentes ao original.

No Brasil, só depois da criação da Lei dos Genéricos, em 1999, esse tipo de avaliação virou padrão. O professor Gilberto de Nucci foi peça-chave nesse processo, montando uma estrutura pioneira na Unicamp e formando boa parte dos especialistas que atuam na área hoje.

Resumindo, esses estudos servem para saber quanto, e com que velocidade, uma substância ativa entra na circulação e está pronta para agir no corpo. A medição é feita com base nos níveis da substância no sangue ao longo do tempo.

Importância da Bioequivalência

Bioequivalência é fundamental para assegurar que duas formulações que contêm o mesmo princípio ativo, geralmente o medicamento de marca (referência) e um genérico, possuem o mesmo comportamento dentro do organismo. Ou seja, liberam a substância ativa com a mesma velocidade e quantidade, atingindo concentrações semelhantes no sangue ao longo do tempo.

Os pontos abaixo reforçam a importância desse estudo:

Planejamento Experimental: Cross-over 2x2

É o planejamento padrão usado em estudos de bioequivalência. Cada voluntário recebe os dois tratamentos, em momentos diferentes, com uma pausa entre eles (período de washout), para evitar a interferência do primeiro na resposta do segundo.

Cada voluntário recebe ambos os tratamentos, mas em ordem diferente. Isso garante que todo mundo seja exposto aos dois medicamentos.

Temos algumas vantagens em aplicar esse planejamento, como o controle da variabilidade intra-indíviduo, pois a resposta de um fármaco pode variar muito entre cada pessoa, porém dentro da mesma pessoa, essa variação tende a ser menor. Assim, cada voluntário atua como seu próprio controle, o que isola melhor o efeito do medicamento. Tendo o erro experimental reduzido, a potência do teste aumenta, permitindo amostras menores para atingir o mesmo poder estatístico comparado a um estudo paralelo. Também é possível aplicar modelos mistos (ANOVA para cross-over) que separam os efeitos de tratamento, período, sequência e voluntário. Isso dá mais precisão na estimativa do efeito do tratamento.

O estudo tambem possui alguns pontos de atenção, como o período de washout adequado. É fundamental garantir que o primeiro tratamento saiu completamente do organismo antes do segundo, pois pode afetar o resultado com efeito residual. Também não é muito indicado para fármacos com meia-vida muito longa, o que implica no período de washout muito extenso, o que pode inviabilizar o estudo.

Coleta de Dados

A ANVISA recomenda a inclusão de, no mínimo, 24 voluntários saudáveis, sendo comum a inclusão de 26 para compensar as possíveis desistências ou exclusões. As amostras de sangue são coletas em tempos pré-determinados após a administração do medicamento, começando do tempo zero até um período suficiente para caracterizar completamente o perfil farmacocinético do fármaco.

Variáveis Analisadas

Equações e Estimativas Farmacocinéticas

Esses são todos os parâmetros essenciais para comparar a biodisponibilidade entre os medicamentos teste e referência. As contas estão detalhadas no procedimento da ANVISA: Manual de Boas Práticas em Biodisponibilidade/Bioequivalência, disponível em:

ANVISA: Manual de Boas Práticas em Biodisponibilidade/Bioequivalência

Quando um medicamento é considerado Bioequivalente?

Segundo a ANVISA, um medicamento teste é considerado bioequivalente ao de referência quando os intervalos de confiança de 90% para as razoes dos parâmetros farmacocinéticos principais (teste/referência): C_max, AUC_0_t e AUC_0_inf – estão dentro do intervalo de 80% a 125%, em escala logarítmica.

Sobre os Dados:

Temos 26 voluntários escolhidos para o estudo. Analisando o banco, observamos que dois voluntários estão faltando, sendo eles o voluntário no 08 e 23. Ainda assim, estamos na inclusão mínima de 24 voluntários, ou seja, poderíamos validar essa análise na ANVISA.

Foi medida a concentração plasmática de cada voluntário durante 20 vezes ao longo de cada período de administração, com pequenos intervalos entre as primeiras coletas (0 → 0,25 → 0,5 → 0,75 → 1) que permite capturar bem o início da curva de concentração plasmática, onde ocorre o pico (C_max). Os intervalos vão aumentando de forma não linear, até a coleta de 48h e 72h que confirma a eliminação completa e garante um cálculo confiável da área sob a curva e meia-vida.

Temos também na base de dados, o período que foi administrado, qual tipo de fármaco e a concentração em ng/ml para cada amostra coletada.

Estatística Descritiva

Importação e Transformação dos Dados

## Pacotes Usados na Análise:
library(dplyr)
library(ggplot2)
library(knitr)
library(gridExtra)
library(patchwork)
library(tidyr)
# ------------------------------------------
# 1. Importação e Preparação dos Dados
# ------------------------------------------
dados <- read.csv("dados.csv", sep = ";", dec = ",", header = TRUE)
head(dados, n=10)
##    voluntario tempo farmaco concentracao periodo
## 1           1  0.00       R         0.00       1
## 2           1  0.25       R         0.00       1
## 3           1  0.50       R         7.21       1
## 4           1  0.75       R        17.22       1
## 5           1  1.00       R        57.05       1
## 6           1  1.33       R        73.14       1
## 7           1  1.67       R        54.85       1
## 8           1  2.00       R        42.44       1
## 9           1  2.50       R        44.65       1
## 10          1  3.00       R        50.21       1

Iremos transformar as colunas “voluntario”, “farmaco” e “periodo” em fatores, usando o pacote dplyr:

# Transformando colunas em fatores
nome_coluna <- c(1, 3, 5)
dados <- dados %>%
  mutate(across(nome_coluna, as.factor))

Também iremos construir um objeto que contém as sequências de tratamento por voluntário:

# Construção da sequência de tratamentos (Group)
group_seq <- dados %>%
  select(voluntario, periodo, farmaco) %>%
  distinct() %>%
  arrange(voluntario, periodo) %>%
  group_by(voluntario) %>%
  summarise(Group = paste(farmaco, collapse = ""), .groups = "drop")
head(group_seq, n=10)
## # A tibble: 10 × 2
##    voluntario Group
##    <fct>      <chr>
##  1 1          RT   
##  2 2          TR   
##  3 3          TR   
##  4 4          RT   
##  5 5          RT   
##  6 6          TR   
##  7 7          RT   
##  8 9          TR   
##  9 10         TR   
## 10 11         RT

Cálculos Farmacocinéticos

Iremos calcular algumas estatísticas descritivas (concentração média, área de concentração sob a curva até um ponto k (ASCt_k), até o infinito (ACt_inf), Kel, meia-vida (t1/2)) para montarmos tabelas por fármaco e por voluntário. De acordo com a ANVISA:

\[ ASCt_{k}= \sum_{i=1}^{k} \frac{C_{i-1}+C_{i}}{2}(t_{i}-t_{i-1}) \] \[ ASCt_{\infty}= ASCt_{k} + \frac{C_{k}}{K_{e}} \] \[ t_{\frac{1}{2}} = \frac{log_{2}}{K_{e}}\] Para o cálculo de \(K_{e}\), devemos ajustar uma regressão \(log_{10}\) nos últimos pontos de concentração (neste trabalho estou usando 6 pontos) do voluntário. Após o ajuste, devemos pegar \(\beta1\) e multiplicar por \(-2.303\) Para isso, usaremos a função abaixo:

# ------------------------------------------
# 2. Cálculo dos Parâmetros Farmacocinéticos
# ------------------------------------------
calcular_parametros <- function(df) {
  Cmax <- max(df$concentracao)
  Tmax <- df$tempo[which.max(df$concentracao)]
  Periodo <- unique(df$periodo)
  
  ultimos_pontos <- df %>%
    arrange(desc(tempo)) %>%
    slice(1:6) %>%
    arrange(tempo)
  
  modelo <- lm(log(concentracao, base = 10) ~ tempo, data = ultimos_pontos)
  Kel <- coef(modelo)[2] * (-2.303)
  MeiaVida <- log(2) / Kel
  AUC_0_t <- sum(diff(df$tempo) * (head(df$concentracao, -1) + tail(df$concentracao, -1)) / 2)
  AUC_0_inf <- AUC_0_t + (tail(df$concentracao, 1) / Kel)
  
  return(data.frame(Periodo, Cmax, Tmax, Kel, MeiaVida, AUC_0_t, AUC_0_inf))
}

resultados <- dados %>%
  group_by(voluntario, farmaco) %>%
  group_modify(~ calcular_parametros(.x))

final_df2 <- resultados %>%
  left_join(group_seq, by = "voluntario")

Com esses dados calculados, podemos montar algumas tabelas descritivas:

# ------------------------------------------
# 4. Tabela Descritiva por Tempo e Fármaco
# ------------------------------------------
tabela_resumo <- dados %>%
  group_by(farmaco, tempo) %>%
  summarise(
    Média = mean(concentracao, na.rm = TRUE),
    Mediana = median(concentracao, na.rm = TRUE),
    `Desvio-Padrão` = sd(concentracao, na.rm = TRUE),
    `Erro-Padrão` = sd(concentracao, na.rm = TRUE) / sqrt(n()),
    `CV(%)` = ifelse(mean(concentracao, na.rm = TRUE) == 0, NA,
                     100 * sd(concentracao, na.rm = TRUE) / mean(concentracao, na.rm = TRUE)),
    Mínimo = min(concentracao, na.rm = TRUE),
    Máximo = max(concentracao, na.rm = TRUE),
    .groups = "drop"
  ) %>%
  arrange(farmaco, tempo)

Tabela Descritiva - Fármaco Refêrencia:

tabela_r <- tabela_resumo %>% 
  filter(farmaco == "R")
kable(tabela_r, digits = 2, align = "c", format = "markdown")
farmaco tempo Média Mediana Desvio-Padrão Erro-Padrão CV(%) Mínimo Máximo
R 0.00 0.00 0.00 0.00 0.00 NA 0.00 0.00
R 0.25 2.71 0.00 6.32 1.29 233.44 0.00 29.72
R 0.50 23.57 20.00 16.58 3.38 70.34 0.00 59.65
R 0.75 39.23 36.39 20.44 4.17 52.10 7.54 80.01
R 1.00 51.24 49.15 20.38 4.16 39.76 18.83 91.35
R 1.33 56.49 53.59 20.32 4.15 35.97 25.70 99.46
R 1.67 55.79 51.64 19.47 3.97 34.90 25.90 96.94
R 2.00 55.19 50.70 17.98 3.67 32.57 33.88 99.41
R 2.50 54.39 49.80 18.57 3.79 34.14 28.00 99.12
R 3.00 55.00 48.86 17.87 3.65 32.50 32.30 95.98
R 4.00 54.00 49.00 17.85 3.64 33.06 27.68 99.12
R 6.00 44.78 39.63 15.20 3.10 33.96 26.26 85.36
R 8.00 40.09 38.89 13.66 2.79 34.07 20.60 77.24
R 10.00 38.72 38.58 12.34 2.52 31.87 18.37 72.71
R 12.00 37.21 37.78 11.37 2.32 30.54 21.27 59.53
R 16.00 34.37 31.38 11.62 2.37 33.80 18.15 67.26
R 20.00 33.76 33.08 12.82 2.62 37.96 14.36 74.17
R 24.00 33.04 30.60 12.64 2.58 38.27 15.18 70.85
R 48.00 24.48 22.73 9.56 1.95 39.07 10.36 48.01
R 72.00 18.65 19.66 7.83 1.60 41.97 6.85 37.84

A tabela apresenta as estatísticas descritivas das concentrações plasmáticas do fármaco de referência (R), coletadas em diferentes tempos após administração. Foram avaliadas as seguintes medidas: média, mediana, desvio-padrão, erro-padrão, coeficiente de variação (CV%), mínimo e máximo.

Observa-se um aumento progressivo das concentrações plasmáticas até aproximadamente 1,33 h, atingindo a média máxima (C_max) de 56,49 ng/ml. Após esse ponto, há uma estabilidade curta, seguida de uma queda gradual, condizente com a fase de eliminação da droga. A mediana acompanha a média em quase todos os tempos, indicando uma distribuição simétrica dos dados na maioria dos pontos.

Tabela Descritiva - Fármaco Teste:

tabela_t <- tabela_resumo %>% 
  filter(farmaco == "T")
kable(tabela_t, digits = 2, align = "c", format = "markdown")
farmaco tempo Média Mediana Desvio-Padrão Erro-Padrão CV(%) Mínimo Máximo
T 0.00 0.00 0.00 0.00 0.00 NA 0.00 0.00
T 0.25 3.45 1.06 4.42 0.90 128.22 0.00 13.53
T 0.50 19.28 14.42 14.61 2.98 75.77 2.16 62.49
T 0.75 37.92 34.41 24.68 5.04 65.08 6.50 84.17
T 1.00 45.15 38.11 23.82 4.86 52.75 8.90 88.57
T 1.33 49.98 46.49 23.50 4.80 47.03 15.94 110.75
T 1.67 51.64 49.71 21.25 4.34 41.16 12.34 97.06
T 2.00 55.72 52.03 24.41 4.98 43.82 14.78 118.86
T 2.50 56.10 51.50 22.81 4.66 40.66 18.49 105.78
T 3.00 57.23 54.69 21.01 4.29 36.71 19.45 108.48
T 4.00 55.53 53.14 16.94 3.46 30.50 28.35 97.01
T 6.00 48.05 49.14 13.61 2.78 28.33 26.62 83.00
T 8.00 44.21 44.90 12.73 2.60 28.80 22.61 69.52
T 10.00 41.78 38.19 13.38 2.73 32.04 22.40 77.06
T 12.00 41.37 37.21 13.87 2.83 33.54 25.42 68.56
T 16.00 37.10 34.45 11.52 2.35 31.05 19.20 60.32
T 20.00 33.91 30.34 10.76 2.20 31.72 18.74 62.09
T 24.00 34.67 31.81 10.67 2.18 30.77 18.73 56.51
T 48.00 26.81 24.81 9.18 1.87 34.23 13.67 50.85
T 72.00 19.35 19.84 7.94 1.62 41.05 8.84 41.62

O pico médio de concentração plasmática (C_max) ocorre por volta de 3,00h, com valor médio de 57,23 ng/ml – ligeiramente maior e mais tardio do que no fármaco de referência (que atinge 56,49 ng/ml em 1,33h). A mediana acompanha bem a média até os tempos mais longos, o que indica distribuição relativamente simétrica dos dados.

O fármaco teste tem um pico mais tardio (Tmax ≈ 3,0h) que o fármaco de referência (Tmax ≈ 1,33h), o que pode indicar uma absorção um pouco mais lenta, apesar das concentrações finais e totais (ex.: valores em 24, 48, 72h) serem próximas.

O perfil do fármaco teste apresenta características compatíveis com um produto bioequivalente: valores de C_max, AUC, e meia-vida semelhantes, além de uma variabilidade dentro dos padrões aceitos. Pequenas diferenças em Tmax podem ocorrer, e não necessariamente comprometem a bioequivalência, desde que os intervalos de confiança 90% para C_max e AUC estejam dentro da faixa 80–125%.

Estatística Descritiva para as Medidas Farmacocinéticas

Iremos montar algumas descritivas sobre os parâmetros farmacocinéticos calculados, podemos usar a função abaixo:

# ------------------------------------------
# 5. Estatísticas Descritivas por Parâmetro
# ------------------------------------------
parametros <- c("Tmax", "Cmax", "Kel", "MeiaVida", "AUC_0_t", "AUC_0_inf")

resumo_parametros <- function(df) {
  df %>%
    summarise(
      Média = mean(valor, na.rm = TRUE),
      Mediana = median(valor, na.rm = TRUE),
      `Erro-Padrão` = sd(valor, na.rm = TRUE) / sqrt(n()),
      `CV(%)` = 100 * sd(valor, na.rm = TRUE) / mean(valor, na.rm = TRUE),
      Mín = min(valor, na.rm = TRUE),
      Máx = max(valor, na.rm = TRUE)
    )
}

tabela_final <- lapply(parametros, function(param) {
  final_df2 %>%
    select(voluntario, farmaco, !!sym(param)) %>%
    rename(valor = !!sym(param)) %>%
    group_by(farmaco) %>%
    resumo_parametros() %>%
    mutate(`Medida Farmacocinética` = param)
}) %>%
  bind_rows() %>%
  relocate(farmaco, `Medida Farmacocinética`) %>%
  arrange(farmaco, `Medida Farmacocinética`)

Para o farmáco REFÊRENCIA:

tabela_final_r <- tabela_final %>% 
  filter(farmaco=="R")
kable(tabela_final_r, digits = 2, align = "c", format = "markdown")
farmaco Medida Farmacocinética Média Mediana Erro-Padrão CV(%) Mín Máx
R AUC_0_inf 4959.99 4047.28 823.64 81.35 1603.36 20558.27
R AUC_0_t 2146.33 2018.18 145.03 33.10 1173.62 4156.19
R Cmax 66.94 65.87 4.21 30.80 35.28 99.46
R Kel 0.01 0.01 0.00 51.84 0.00 0.03
R MeiaVida 89.18 64.15 19.65 107.93 25.98 492.18
R Tmax 2.36 1.83 0.39 80.67 0.75 10.00

Para o farmáco TESTE:

tabela_final_t <- tabela_final %>% 
  filter(farmaco=="T")
kable(tabela_final_t, digits = 2, align = "c", format = "markdown")
farmaco Medida Farmacocinética Média Mediana Erro-Padrão CV(%) Mín Máx
T AUC_0_inf 5266.78 4197.05 828.42 77.06 2062.48 19242.46
T AUC_0_t 2276.89 2040.53 141.57 30.46 1436.86 4093.40
T Cmax 67.69 64.60 4.40 31.82 38.03 118.86
T Kel 0.01 0.01 0.00 48.48 0.00 0.02
T MeiaVida 93.61 57.71 22.14 115.89 29.69 502.58
T Tmax 2.95 2.50 0.49 81.47 0.75 12.00

Comparando entre REFÊRENCIA e TESTE:

Medidas farmacocinéticas das médias das concentrações plasmáticas dos medicamentos de referência (R) e teste (T)
Fármaco \(T_{max}\) \(C_{max}\) \(K_{e}\) \(t_{1/2}\) \(AUC_{t}\) \(AUC_{\infty}\)
R 2.36 66.94 0.01 89.18 2416.33 4959.99
T 2.95 67.69 0.01 93.61 2276.89 5266.78

Pelas tabelas acima, podemos observar alguns pontos interessantes:

  • O fármaco teste (T) atinge o pico mais tardiamente, podendo indicar uma absorção mais lenta.

  • Meia-vida de R e T possuem valores altos e semelhantes. T tem leve tendência de eliminar mais lentamente.

  • Alta variabilidade em quase todos os parâmetros.

  • \(K_{el}\): embora a média pareça igual (~0,01), o CV é alto (~48–52%), reforçando que existem indivíduos com perfis de eliminação muito distintos.

  • As médias de C_max são praticamente iguais (66,9 vs 67,7), com CV razoável (~31%). Boa indicação de equivalência nesse parâmetro.

  • \(K_{el}\) e Meia-vida são bem próximas, embora muito variáveis. Não parecem afetar diferentemente os dois fármacos.

Gráficos Comparativos:

Podemos analisar alguns gráficos a respeito da descritiva que fizemos acima:

# ------------------------------------------
# 6. Gráficos Comparativos e Distribuição
# ------------------------------------------

# Linha Cmax por voluntário
ggplot(final_df2, aes(x = voluntario, y = Cmax, group = farmaco, color = farmaco)) +
  geom_line(aes(linetype = farmaco), size = 1.2) +
  geom_point(size = 3) +
  labs(title = "Concentração Máxima Observada por Voluntário nas Formulações R e T",
       x = "Voluntários", y = "Concentração Máxima Observada", color = "Formulação") +
  theme_minimal() +
  theme(legend.position = "bottom")

# Linha Tmax por voluntário
ggplot(final_df2, aes(x = voluntario, y = Tmax, group = farmaco, color = farmaco)) +
  geom_line(aes(linetype = farmaco), size = 1.2) +
  geom_point(size = 3) +
  labs(title = "Tempo até atingir Cmax por Voluntário nas Formulações R e T",
       x = "Voluntários", y = "Tmax Observado", color = "Formulação") +
  theme_minimal() +
  theme(legend.position = "bottom")

# Linha ASC_k por voluntário
ggplot(final_df2, aes(x = voluntario, y = AUC_0_t, group = farmaco, color = farmaco)) +
  geom_line(aes(linetype = farmaco), size = 1.2) +
  geom_point(size = 3) +
  labs(title = "AUC_0_t por Voluntário nas Formulações R e T",
       x = "Voluntários", y = "AUC_0_t", color = "Formulação") +
  theme_minimal() +
  theme(legend.position = "bottom")

As formulações R e T apresentaram perfis semelhantes nos voluntários, mas com diferenças sutis: a formulação T mostrou, em média, C_max um pouco mais alta e AUC0t maior, sugerindo maior extensão da absorção; o Tmax também foi levemente superior em T, indicando absorção mais lenta. Apesar dessas diferenças, a alta variabilidade entre os indivíduos exige análise estatística formal para confirmar bioequivalência.

Pressuposto de Normalidade

Para a verificação do pressuposto de normalidade de C_max, necessário para os testes estatísticos do crossover (modelo misto, ANOVA), podemos analisar graficamente e pelo teste de Shapiro-wilks, assim escrito no manual da ANVISA.

# ------------------------------------------
# 7. Teste de Normalidade (Shapiro-Wilk)
# ------------------------------------------
# Histogramas de Cmax e log(Cmax)
p1 <- ggplot(final_df2 %>% filter(farmaco == "R"), aes(x = Cmax)) +
  geom_histogram(color = "black", fill = "lightblue", bins = 15) +
  labs(title = "(a) R - Escala original", x = "Cmax", y = "Frequência") +
  theme_minimal()
p2 <- ggplot(final_df2 %>% filter(farmaco == "T"), aes(x = Cmax)) +
  geom_histogram(color = "black", fill = "salmon", bins = 15) +
  labs(title = "(b) T - Escala original", x = "Cmax", y = "Frequência") +
  theme_minimal()
p3 <- ggplot(final_df2 %>% filter(farmaco == "R"), aes(x = log(Cmax))) +
  geom_histogram(color = "black", fill = "lightblue", bins = 15) +
  labs(title = "(c) R - Escala log", x = "log(Cmax)", y = "Frequência") +
  theme_minimal()
p4 <- ggplot(final_df2 %>% filter(farmaco == "T"), aes(x = log(Cmax))) +
  geom_histogram(color = "black", fill = "salmon", bins = 15) +
  labs(title = "(d) T - Escala log", x = "log(Cmax)", y = "Frequência") +
  theme_minimal()
grid.arrange(p1, p2, p3, p4, ncol = 2)

# Boxplots
box1 <- ggplot(final_df2, aes(x = farmaco, y = Cmax, fill = farmaco)) +
  geom_boxplot(alpha = 0.7) +
  labs(title = "Boxplot de Cmax", x = "Fármaco", y = "Cmax") +
  theme_minimal()
box2 <- ggplot(final_df2, aes(x = farmaco, y = log(Cmax), fill = farmaco)) +
  geom_boxplot(alpha = 0.7) +
  labs(title = "Boxplot de log(Cmax)", x = "Fármaco", y = "log(Cmax)") +
  theme_minimal()
grid.arrange(box1, box2, ncol = 2)

# QQ plots
qq1 <- ggplot(subset(final_df2, farmaco == "R"), aes(sample = Cmax)) +
  stat_qq() + stat_qq_line() +
  labs(title = "QQ Plot - Cmax (R)")
qq2 <- ggplot(subset(final_df2, farmaco == "T"), aes(sample = Cmax)) +
  stat_qq() + stat_qq_line() +
  labs(title = "QQ Plot - Cmax (T)")
qq3 <- ggplot(subset(final_df2, farmaco == "R"), aes(sample = log(Cmax))) +
  stat_qq() + stat_qq_line() +
  labs(title = "QQ Plot - log(Cmax) (R)")
qq4 <- ggplot(subset(final_df2, farmaco == "T"), aes(sample = log(Cmax))) +
  stat_qq() + stat_qq_line() +
  labs(title = "QQ Plot - log(Cmax) (T)")
grid.arrange(qq1, qq2, qq3, qq4, ncol = 2)

# ------------------------------------------
# 7. Teste de Normalidade (Shapiro-Wilk)
# ------------------------------------------
shapiro_tbl <- tibble::tibble(
  Farmaco     = rep(c("R", "T"), each = 2),
  Variável    = rep(c("Cmax", "log(Cmax)"), times = 2),
  W           = c(
    shapiro.test(subset(final_df2, farmaco == "R")$Cmax)$statistic,
    shapiro.test(log(subset(final_df2, farmaco == "R")$Cmax))$statistic,
    shapiro.test(subset(final_df2, farmaco == "T")$Cmax)$statistic,
    shapiro.test(log(subset(final_df2, farmaco == "T")$Cmax))$statistic
  ),
  `p-valor`   = c(
    shapiro.test(subset(final_df2, farmaco == "R")$Cmax)$p.value,
    shapiro.test(log(subset(final_df2, farmaco == "R")$Cmax))$p.value,
    shapiro.test(subset(final_df2, farmaco == "T")$Cmax)$p.value,
    shapiro.test(log(subset(final_df2, farmaco == "T")$Cmax))$p.value
  )
) %>%
  mutate(Normalidade = ifelse(`p-valor` > 0.05, "Não Rejeita", "Rejeita"))

kable(shapiro_tbl, digits = 3, align = "c", format = "markdown")
Farmaco Variável W p-valor Normalidade
R Cmax 0.936 0.132 Não Rejeita
R log(Cmax) 0.944 0.201 Não Rejeita
T Cmax 0.913 0.040 Rejeita
T log(Cmax) 0.966 0.569 Não Rejeita

Os testes de normalidade indicaram que a variável C_max apresenta comportamento aproximadamente normal para o fármaco R (p = 0.132), e que a transformação logarítmica melhora ainda mais esse ajuste (p = 0.201). Para o fármaco T, a variável C_max não segue uma distribuição normal (p = 0.0403), mas após a transformação logarítmica, a normalidade é atendida (p = 0.569). Assim, os resultados sugerem que a aplicação de log (C_max) é apropriada para análises que assumem normalidade, especialmente no caso do fármaco T.

Análise Descritiva por Voluntário:

Descritiva por Voluntário: Voluntário 1

Descritiva por Voluntário: Voluntário 2

Descritiva por Voluntário: Voluntário 3

Descritiva por Voluntário: Voluntário 4

Descritiva por Voluntário: Voluntário 5

Descritiva por Voluntário: Voluntário 6

Descritiva por Voluntário: Voluntário 7

Descritiva por Voluntário: Voluntário 9

Descritiva por Voluntário: Voluntário 10

Descritiva por Voluntário: Voluntário 11

Descritiva por Voluntário: Voluntário 12

Descritiva por Voluntário: Voluntário 13

Descritiva por Voluntário: Voluntário 14

Descritiva por Voluntário: Voluntário 15

Descritiva por Voluntário: Voluntário 16

Descritiva por Voluntário: Voluntário 17

Descritiva por Voluntário: Voluntário 18

Descritiva por Voluntário: Voluntário 19

Descritiva por Voluntário: Voluntário 20

Descritiva por Voluntário: Voluntário 21

Descritiva por Voluntário: Voluntário 22

Descritiva por Voluntário: Voluntário 24

Descritiva por Voluntário: Voluntário 25

Descritiva por Voluntário: Voluntário 26

Considerações Finais

A comparação entre os fármacos R e T mostrou parâmetros farmacocinéticos médios semelhantes, com destaque para valores próximos de C_max, AUC e Meia-vida. Os gráficos de concentração sugerem perfis compatíveis, com o T apresentando leve atraso no Tmax.

Os testes de Shapiro-Wilk indicaram que os dados de C_max para o fármaco T não seguem distribuição normal, sendo necessário o uso de log(C_max) para atender esse pressuposto. A transformação logarítmica também foi confirmada visualmente pelos histogramas e gráficos de probabilidade normal, tornando-a recomendada para análises estatísticas comparativas.

O próximo passo da análise seria aplicação da ANOVA para verificar possíveis diferenças estatísticas entre os fármacos, considerando os parâmetros farmacocinéticos transformados quando necessário. Em paralelo, a comparação dos intervalos de confiança para as médias permitirá avaliar a equivalência entre os tratamentos, especialmente para C_max e AUC, critérios essenciais em estudos de bioequivalência.